package com.test;

import java.util.*;

/***
 * 所有实现均基于JDK，不可使用第三方中间件
 * 1.实现下方的抽奖方法(luckdraw)，提供5000次抽奖机会，奖品有一等奖3个，二等奖 100个，三等奖50个，各个奖品需在5000次抽奖中尽量平均分布，但不可有规律被抽中
 * 2.实现下方的数字查找方法，查找最大数和最小数，并得出它们的乘积（不可使用集合工具类）
 * 3.实现下方的查找方法（findAndReturn）供他人调用，传入参数为不可预知的List，分别查找List中2的倍数，5的倍数出现的次数，调用checkEqual方法判断如果返回true就不计入次数，最后返回结果集，此方法有性能要求。
 */
public class Demo {


    /***
     * 检查是否等于100
     *@param num 比较值
     *@return 相等返回true 否则false
     */
    public static boolean checkEqual(Integer num) {
        return num==100;
    }

    public static void luckDraw() {
        // do something
        //定义一个抽奖的容器,放抽奖劵
        ArrayList<String> list = new ArrayList<>();
        for (int i = 0; i < 3; i++) {
            list.add("一等奖");
        }
        for (int i = 0; i < 100; i++) {
            list.add("二等奖");
        }
        for (int i = 0; i < 50; i++) {
            list.add("三等奖");
        }
        for (int i = 0; i < (5000 - 3 - 100 - 50); i++) {
            list.add("谢谢参与");
        }
        //打乱集合顺序
        Collections.shuffle(list);
        //随机抽奖
        int index = new Random().nextInt(list.size());
        System.out.println(index);
        System.out.println("抽奖结果是:"+list.get(index));
    }

    public static void findNumber() {
        String[] array={"1","5","33","7","8","27","5","90","2","6","25"};
        // do something
        //第一步:先将字符数组转为Integer数组
        Integer[] arr = new Integer[array.length];
        for (int i = 0; i < array.length; i++) {
            arr[i] = Integer.parseInt(array[i]);
        }
        //第二步:冒泡按由小到大对arr排序
        for (int i = 0; i < arr.length-1; i++) {
            for (int j = i+1; j < arr.length; j++) {
                if (arr[i]>arr[j]){
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        //第三步:排序之后的数组打印
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] == arr[0]){
                System.out.print("["+arr[i]+",");
            } else if (arr[i]!=arr[arr.length-1]){
                System.out.print(arr[i]+",");
            }else {
                System.out.println(arr[i]+"]");
            }
        }
        //输出结果,得出结论
        System.out.println("最大值为arr[0]:"+arr[0]);
        System.out.println("最小值为arr[arr.length-1]:"+arr[arr.length-1]);
        System.out.println("最大值和最小值得乘积为arr[0]*arr[arr.length-1]:"+(arr[0]*arr[arr.length-1]));
    }

    public Map<Integer,Integer> findAndReturn(List<Integer> list){
        //用于统计2倍数的次数
        int a = 0;
        //用于统计5倍数的次数
        int b = 0;
        //返回结果集
        Map<Integer,Integer> map = new HashMap<>();
        for (Integer integer : list) {
            boolean flag = checkEqual(integer);
            if (flag == false){
                if (integer%2 == 0){
                    a++;
                    map.put(2, a);
                }
                if (integer%5 == 0){
                    b++;
                    map.put(5, b);
                }
            }else {
                //数字为100时作废此次循环操作
                continue;
            }
        }

        return map;
    }


}
